/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package by.vdl.websort.server.entity.contextmodels;

import by.vdl.websort.server.entity.CategoryDTO;
import by.vdl.websort.server.entity.ItemDTO;
import by.vdl.websort.server.entity.SortedTableDTO;
import by.vdl.websort.server.entity.StudyDTO;

import java.util.*;

/**
 *
 * @author zeor
 */
public class StudySortedModel {
    
    private StudyDTO studyDTO;
    
    private Map<CategoryDTO, Set<ItemDTO>> sortedStudy;

    private StudySortedModel(){}
    
    public StudySortedModel(StudyDTO studyDTO, Map<CategoryDTO, Set<ItemDTO>> sortedStudy) {
        this.studyDTO = studyDTO;
        this.sortedStudy = sortedStudy;
    }
    
    public StudyDTO getStudyDTO() {
        return studyDTO;
    }

    public Map<CategoryDTO, Set<ItemDTO>> getSortedStudy() {
        return sortedStudy;
    }
   
    public StudySortedModel sortStudy(StudyUnsortedModel studyUnsortedModel) {
        final List<CategoryDTO> categories = studyUnsortedModel.getCategories();
        final List<ItemDTO> items = studyUnsortedModel.getItems();
        
        StudySortedModel studySortedModel = new StudySortedModel(studyUnsortedModel.getStudy(), new HashMap<CategoryDTO, Set<ItemDTO>>());
        for (SortedTableDTO sortedTie : studyUnsortedModel.getSortedTable()) {
            ItemDTO itemDTO = getItemById(sortedTie.getItemId(), items);
            CategoryDTO categoryDTO = getCategoryById(sortedTie.getCategoryId(), categories);
            
            try {
                studySortedModel.getSortedStudy().get(categoryDTO).add(itemDTO);
            } catch (Exception e) {
                Set<ItemDTO> setItems = new HashSet<ItemDTO>(); 
                setItems.add(itemDTO);
                studySortedModel.getSortedStudy().put(categoryDTO, setItems);
            }
        }
        return studySortedModel;
    }
    
    private CategoryDTO getCategoryById(long categoryId, List<CategoryDTO> categories){
        int position = categories.indexOf(new CategoryDTO(categoryId));
        return categories.get(position);
    }
    private ItemDTO getItemById(long itemId, List<ItemDTO> items){
        int position = items.indexOf(new ItemDTO(itemId));
        return items.get(position);
    }
}
